package com.netx.data;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import com.netx.generics.time.Date;
import com.netx.generics.time.Moment;
import com.netx.generics.time.Time;


public class ValueList {

	private final Map<String,Object> _map;
	
	public ValueList() {
		_map = new HashMap<String,Object>();
	}
	
	public ValueList addValue(String name, boolean value) {
		return add(name, new Boolean(value));
	}

	public ValueList addValue(String name, char value) {
		return add(name, value+"");
	}

	public ValueList addValue(String name, byte value) {
		return add(name, new Byte(value));
	}
	
	public ValueList addValue(String name, short value) {
		return add(name, new Short(value));
	}
	
	public ValueList addValue(String name, int value) {
		return add(name, new Integer(value));
	}

	public ValueList addValue(String name, long value) {
		return add(name, new Long(value));
	}
	
	public ValueList addValue(String name, float value) {
		return add(name, new Float(value));
	}
	
	public ValueList addValue(String name, double value) {
		return add(name, new Double(value));
	}
	
	public ValueList addValue(String name, Boolean value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Character value) {
		return add(name, value.toString());
	}

	public ValueList addValue(String name, Byte value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Short value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Integer value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Long value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Float value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Double value) {
		return add(name, value);
	}

	public ValueList addValue(String name, String value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Moment value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Date value) {
		return add(name, value);
	}

	public ValueList addValue(String name, Time value) {
		return add(name, value);
	}

	// For Entity:
	int size() {
		return _map.size();
	}

	// For Entity:
	Iterator<Object> iterator() {
		return _map.values().iterator();
	}
	
	// For Entity:
	ValueList add(String name, Object value) {
		if(_map.containsKey(name)) {
			throw new IllegalArgumentException("repeated field: \""+name+"\"");
		}
		else {
			_map.put(name, new Value(name, value));
			return this;
		}
	}
}
